
(function(global,factory){
    
    // 我希望这个运行环境是window(浏览器环境 )
    // this 当前的上下文（运行环境）
    // 宿主 
    // DOM ---> window.document   

    if(typeof module === "object" && typeof module.exports === "object" ){
        // 非浏览器环境
    }else{
        factory( global )
    }
    
}( typeof window !== "undefined" ? window : this ,
    function( window, noGlobal ){
    // console.log('this is factory')

    var jQuery20 = function(){
        // 如果 直接 return new jQuery20(); 会引起栈溢出

        return new jQuery20.fn.init();
    }

    // 无new的原理  将jQuery20 的原型转移到init的方法当中
    jQuery20.fn = jQuery20.prototype ={
        attr:function(){}
    }

    var init = jQuery20.fn.init = function(){} ;
    // init.prototype 实质上就是 jQuery20的prototype
    init.prototype =  jQuery20.fn ;


    if(typeof noGlobal === 'undefined'){
        // 确认 如果是有window的话，就挂载在window上
        window.jQuery20 = window.$20 = jQuery20;
    }
    return jQuery20;
}))